package com.genreate.util.linuxUtil;

import com.jcraft.jsch.SftpProgressMonitor;

/**
 * 进度监视器
 *
 * @author LYS
 * @date 2025-03-06
 */
public class MyProgressMonitor implements SftpProgressMonitor {
    // 已传输的字节数
    private long transferred = 0;
    // 文件大小
    private long fileSize = 0;
    // 上一次打印的百分比
    private int lastPrintedPercentage = 0;

    @Override
    public void init(int op, String src, String dest, long max) {
        // 初始化已传输的字节数和文件大小
        this.fileSize = max;
        this.transferred = 0;
        this.lastPrintedPercentage = 0;
        // 打印开始传输的信息
        System.out.println("开始传输: " + src + " -> " + dest + ", 文件大小: " + max + " 字节");
    }

    @Override
    public boolean count(long count) {
        // 更新已传输的字节数
        transferred += count;
        // 计算当前传输的百分比
        int currentPercentage = (int) ((double) transferred / fileSize * 100);
        // 如果当前百分比大于等于上一次打印的百分比加10，则打印当前传输的百分比
        if (currentPercentage >= lastPrintedPercentage + 10) {
            // 确保是10的倍数
            lastPrintedPercentage = currentPercentage / 10 * 10;
            System.out.printf("已传输: %d%% (%d/%d 字节)%n", lastPrintedPercentage, transferred, fileSize);
        }
        // 返回 true 表示继续传输
        return true;
    }

    @Override
    public void end() {
        // 打印传输完成的信息
        System.out.println("传输完成！");
    }
}